package com.gxnu.edu.cn.ttxxt.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gxnu.edu.cn.ttxxt.entity.Friendship;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Optional;

@Mapper
public interface FriendshipRepository extends BaseMapper<Friendship> {

    /**
     * 根据用户ID查询好友关系列表
     * @param userId 用户ID
     * @return 好友关系列表
     */
    List<Friendship> findByUserId(@Param("userId") Long userId);

    /**
     * 根据用户ID和状态查询好友关系
     * @param userId 用户ID
     * @param status 状态(1-正常，2-已删除，3-已拉黑)
     * @return 好友关系列表
     */
    List<Friendship> findByUserIdAndStatus(@Param("userId") Long userId,
                                           @Param("status") Integer status);

    /**
     * 根据用户ID和好友ID查询好友关系
     * @param userId 用户ID
     * @param friendId 好友ID
     * @return 好友关系(Optional包装)
     */
    Optional<Friendship> findByUserIdAndFriendId(@Param("userId") Long userId,
                                                 @Param("friendId") Long friendId);

    /**
     * 检查用户和好友之间是否存在关系
     * @param userId 用户ID
     * @param friendId 好友ID
     * @return 是否存在关系
     */
    boolean existsByUserIdAndFriendId(@Param("userId") Long userId,
                                      @Param("friendId") Long friendId);

    /**
     * 删除用户和好友之间的关系
     * @param userId 用户ID
     * @param friendId 好友ID
     * @return 影响行数
     */
    int deleteByUserIdAndFriendId(@Param("userId") Long userId,
                                  @Param("friendId") Long friendId);

    /**
     * 更新好友备注和分组
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param remark 备注
     * @param groupName 分组名
     * @return 影响行数
     */
    int updateRemarkAndGroup(@Param("userId") Long userId,
                             @Param("friendId") Long friendId,
                             @Param("remark") String remark,
                             @Param("groupName") String groupName);

    /**
     * 更新好友关系状态
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param status 新状态
     * @return 影响行数
     */
    int updateStatus(@Param("userId") Long userId,
                     @Param("friendId") Long friendId,
                     @Param("status") Integer status);

    void add(Friendship friendship);
}